package com.suoluo.zenadmin.service.dest;

import java.util.List;
import java.util.Map;

import com.suoluo.zenadmin.vo.BaseInfoVO;
import com.suoluo.zenadmin.vo.ImageVO;
import com.suoluo.zenadmin.vo.PageVO;
import com.suoluo.zenadmin.vo.country.ContinentVO;
import com.suoluo.zenadmin.vo.country.CountryVO;
import com.suoluo.zenadmin.vo.dest.DestActivityVO;
import com.suoluo.zenadmin.vo.dest.DestAllFeatureVO;
import com.suoluo.zenadmin.vo.dest.DestFeature2VO;
import com.suoluo.zenadmin.vo.dest.DestFeatureCategoryVO;
import com.suoluo.zenadmin.vo.dest.DestFeatureItem2VO;
import com.suoluo.zenadmin.vo.dest.DestPathVO;
import com.suoluo.zenadmin.vo.dest.DestVO;
import com.suoluo.zenadmin.vo.dest.SelectFeatureItemVO;
import com.suoluo.zenadmin.vo.hotel.Hotel2VO;

public interface DestService {

	/**
	 * 查询目的地信息
	 * @param invo
	 * @param page
	 * @return
	 */
	public List<DestVO> findSimplestDests(String destName,PageVO page);
	
	/**
	 * 查询目的地信息
	 */
	public List<DestVO> findDestsWithoutContent();
	
	/**
	 * 统计目的地数量
	 * @param destName
	 * @return
	 */
	public int findDestCount(String destName);
	/**
	 * 添加目的地时查询归属的国家信息
	 * @return
	 */
	public List<CountryVO> findCountries();
	/**
	 * 保存目的地信息
	 * @param destVO
	 * @return
	 */
	public void saveDest(DestVO destVO);
	/**
	 * 根据Id查询目的地信息
	 * @param destId
	 * @return
	 */
	public DestVO findDestById(int destId);
	/**
	 * 更新目的地信息
	 * @param destVO
	 * @return
	 */
	public void updateDest(DestVO destVO);
	/**
	 * 删除目的地
	 * @param destId
	 */
	public void deleteDest(DestVO destVO);

	/**
	 * 查询目的地即将到来的活动信息
	 * @return
	 */
	public List<DestActivityVO> findListDestActivity(int destId);

	/**
	 * 保存目的地即将到来的活动信息
	 * @param activity
	 */
	public void saveDestActivity(DestActivityVO activity);
	/**
	 * 根据Id查询目的地即将到来的活动信息
	 * @param activityId
	 * @return
	 */
	public DestActivityVO findDestActivityById(int activityId);
	/**
	 * 更新目的地即将到来的活动信息
	 * @param activity
	 */
	public void updateDestActivity(DestActivityVO activity);
	/**
	 * 删除目的地即将到来的活动信息
	 * @param activityId
	 */
	public void deleteDestActivity(DestActivityVO activity);
	
	/**
	 * 查询目的地下的特色信息
	 * @param destId
	 * @return
	 */
	public List<DestFeature2VO> findSimpleDestFeatures(int destId);
	
	/**
	 * 保存目的地特色信息
	 * @param feature
	 * @return
	 */
	public void saveDestFeature(DestFeature2VO feature);
	
	/**
	 * 根据id查询目的地特色信息
	 * @param featureId
	 * @return
	 */
	public DestFeature2VO findDestFeatureById(int featureId);
	/**
	 * 更新目的地特色信息
	 * @param feature
	 * @return
	 */
	public void updateDestFeature(DestFeature2VO feature);
	/**
	 * 删除目的地特色信息
	 * @param featureId
	 * @return
	 */
	public void deleteDestFeature(DestFeature2VO feature);
//	/**
//	 * 根据目的地Id查询目的地下还未添加的类别信息
//	 * @param destId
//	 * @return
//	 */
//	public List<DestFeatureCategoryPOJO> findNoAddFeatureCategory(int destId,int categoryId);
	/**
	 * 根据特色Id查询特色项信息
	 * @param featureId
	 * @return
	 */
	public List<DestFeatureItem2VO> findFeatureItemWithoutContent(int featureId);
	
	/**
	 * 查询目的地下的所有特色项，如果categoryId=0表示，查询所有
	 * @param destId
	 * @param categoryId
	 * @return
	 */
	public List<DestFeatureItem2VO> findFeatureItemsWithoutContent(int destId,int categoryId);
	
	/**
	 * 查询目的地下的特色类别
	 * @param destId
	 * @return
	 */
	public List<DestFeatureCategoryVO> findDestFeatureCatetories(int destId);
	
	/**
	 * 保存目的地特色项
	 * @param itemVO
	 */
	public void saveDestFeatureItem(DestFeatureItem2VO itemVO);
	/**
	 * 根据Id查询特色项信息
	 * @param featureItemId
	 */
	public DestFeatureItem2VO findFeatureItemById(int featureItemId);
	
	/**
	 * 查询最简单的FeatureItem
	 * @param featureItemId
	 * @return
	 */
	public DestFeatureItem2VO findSimplestFeatureItemById(int featureItemId);
	
	/**
	 * 更新特色项信息
	 * @param itemVO
	 */
	public void updateDestFeatureItem(DestFeatureItem2VO itemVO);
	
	/**
	 * 保存住宿的特色项信息
	 * @param item
	 */
	public void saveHotelFeatureItem(DestFeatureItem2VO item);
	/**
	 * 删除特色项
	 * @param itemId
	 */
	public void deleteFeatureItem(DestFeatureItem2VO item,int featureCategoryId);
	
	/**
	 * 查询特色勾选推荐的特色项列表信息
	 * @param featureId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findListFeatureSelectItem(int featureId);
	/**
	 * 保存选中的特色项
	 * @param itemPOJO
	 * @return
	 */
	public void saveSelectFeatureItem(SelectFeatureItemVO itemVO);
	
	/**
	 * 查询同一特色下的所有特色项
	 * @param featureId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findListAllFeatureItem(int featureId);
	/**
	 * 添加目的地住宿的特色项，查询目的地下的酒店信息
	 * @param destId
	 * @param featureId
	 * @return
	 */
	public List<Hotel2VO> findListDestHotel(int destId,int featureId); 
	
	/**
	 * 查询目的地的导航树
	 * @return
	 */
	public List<ContinentVO> findDestNavigateTree();
	
	/**
	 * 查询目的地的路径(洲-国家-目的地)
	 * @param destId 目的地
	 * @return
	 */
	public DestPathVO findDestPath(int destId);

	/**
	 * 查询推荐的特色项信息
	 * @param itemId
	 * @param featureId
	 * @param pageSize
	 * @return
	 */
	public List<DestFeatureItem2VO> findSamilarDestFeatureItems(int itemId,int featureId,int pageSize);
	

	/**
	 * 根据特色Id查询特色项集合
	 * @param featureId
	 * @return
	 */
	public List<DestFeatureItem2VO> findFeatureItemsWithoutContentByFeatureId(int featureId);
	/**
	 * 为单独发布目的地，酒店的左侧导航树和区域信息数据需要和目的地的区分开，
	 * 酒店需要把不可用目的地但是是可以发布酒店的目的地信息查询出来
	 * @return
	 */
	public List<ContinentVO> findHotelNavigateTree();
	
	/**
	 * 查询目的地最简单的信息，不包含图片的信息
	 * @param destId
	 * @return
	 */
	public DestVO findSimplestDestById(int destId);
	
	/**
	 * 查询最简单的特色
	 * @param featureId
	 * @return
	 */
	public DestFeature2VO findSimplestDestFeatureById(int featureId);
	
	/**
	 * 查询目的地下的特色信息，和特色下的选中的三个特色项信息
	 * @param destId
	 * @return
	 */
	public DestAllFeatureVO findDestAllFeatures(int destId);
	
	/**
	 * 查询不带Content的目的地
	 * @param destId
	 * @return
	 */
	public DestVO findDestWithoutContentById(int destId);
	/**
	 * 查询特色项的文字描述信息
	 * @param featureItemId
	 * @return
	 */
	public List<BaseInfoVO> findSubItemsForFeatureItem(int featureItemId);
	/**
	 * 保存特色项多图的描述信息
	 * @param infoVO
	 */
	public void saveFeatureItemText(BaseInfoVO infoVO);
	/**
	 * 查询指定基础信息
	 * @param infoId
	 */
	public BaseInfoVO findBaseInfoById(int infoId);
	/**
	 * 更新特色项多图描述信息
	 * @param base
	 */
	public void updateFeatureItemText(BaseInfoVO base);
	/**
	 * 删除基础信息
	 * @param base
	 */
	public void deleteFeatureItemText(BaseInfoVO base);
	/**
	 * 查询特色项的多图信息
	 * @param infoId
	 * @return
	 */
	public List<ImageVO> findListFeatureItemImages(int infoId);
	/**
	 * 保存特色项多图信息
	 * @param infoVO
	 */
	public void saveFeatureItemImage(BaseInfoVO infoVO);
	/**
	 * 查询所有单独发布的特色项
	 * @return
	 */
	public List<DestFeatureItem2VO> findListAloneFeatureItem(PageVO page);
	/**
	 * 查询完整的特色项，包含特色项的本身，以及特色项的子信息及图片
	 * @param featureItemId
	 * @return
	 */
	public DestFeatureItem2VO findCompleteFeatureItemById(int featureItemId);
	/**
	 * 统计独立发布的特色项
	 * @return
	 */
	public int findAloneFeatureItemCount();
	
	/**
	 * 查询过期的特色项信息
	 * @param page
	 * @return
	 */
	public List<DestFeatureItem2VO> findListExpireFeatureItem(PageVO page);
	/**
	 * 统计失效的特色项数量
	 * @return
	 */
	public int findExpireFeatureItemCount();
	/**
	 * 删除失效特色项
	 * @param item
	 */
	public void deleteExpireFeatureItem(DestFeatureItem2VO item);
	/**
	 * 酒店简化版查询4条酒店周边信息
	 * @param destId
	 */
	public List<DestFeatureItem2VO> find4FeatureItems(int destId);
	
	/**
	 * 查询所有目的地基础信息
	 * @return
	 */
	public List<DestVO> findAllDest();
	
	/**
	 * 查询目的地下的特色信息,包括特色描述和特色图片
	 * @param destId
	 * @return
	 */
	public List<DestFeature2VO> findDestFeatures(int destId);
	
	/**
	 * 查询指定特色的特色项
	 * @param featureIds
	 * @return
	 */
	public List<DestFeatureItem2VO> findFeatureItems(List<Integer> featureIds);
}
